﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _3__2
{
    internal class Program
    {
        // 定义Building类，用于描述楼房的属性和功能
        class Building
        {
            // 1. 定义私有数据成员（仅类内部可访问，体现封装性）
            private double length;   // 楼房的长
            private double width;    // 楼房的宽
            private int floorCount;  // 楼房的层数
            private double price;    // 每平方米单价

            // 2. 构造函数（与类名相同，无返回值，用于创建对象时初始化数据）
            // 参数顺序：长、宽、层数（与后续用户输入顺序对应）
            public Building(double len, double wid, int floor)
            {
                length = len;       // 将传入的"长"赋值给类的length字段
                width = wid;        // 将传入的"宽"赋值给类的width字段
                floorCount = floor; // 将传入的"层数"赋值给类的floorCount字段
            }

            // 3. 定义属性（MyPrice）：控制对private字段price的访问（实现"安全赋值"）
            public double MyPrice
            {
                get { return price; } // 读取价格（外界可通过MyPrice获取price值）
                set { price = value; } // 赋值价格（外界通过MyPrice给price赋值，value是外界传入的值）
            }

            // 4. 定义方法1：计算楼房总面积（每层面积×层数）
            public double GetArea()
            {
                double floorArea = length * width; // 计算单层面积（长×宽）
                return floorArea * floorCount;     // 返回总面积（单层面积×层数）
            }

            // 5. 定义方法2：计算楼房总价（总面积×单价）
            public double TotalPrice()
            {
                return GetArea() * price; // 调用GetArea()获取总面积，再乘以单价
            }
        }

        // 以下是默认的Program类（无需修改类名，Main函数在此类中）
        
        static void Main(string[] args)
        {
           
            {
                // 1. 定义变量，用于存储用户输入的数值
                double inputLength, inputWidth, inputPrice;
                int inputFloor;

                // 2. 引导用户输入，并验证输入是否为有效数字（避免输入字母/符号导致程序崩溃）
                // 输入"长"
                Console.Write("请输入楼房的长（米）：");
                while (!double.TryParse(Console.ReadLine(), out inputLength))
                {
                    Console.Write("输入错误！请输入数字（如25）：");
                }

                // 输入"宽"
                Console.Write("请输入楼房的宽（米）：");
                while (!double.TryParse(Console.ReadLine(), out inputWidth))
                {
                    Console.Write("输入错误！请输入数字（如10）：");
                }

                // 输入"层数"（层数是整数，用int.TryParse）
                Console.Write("请输入楼房的层数：");
                while (!int.TryParse(Console.ReadLine(), out inputFloor))
                {
                    Console.Write("输入错误！请输入整数（如6）：");
                }

                // 输入"单价"
                Console.Write("请输入每平方米单价（万元）：");
                while (!double.TryParse(Console.ReadLine(), out inputPrice))
                {
                    Console.Write("输入错误！请输入数字（如2.5）：");
                }

                // 3. 创建Building类的对象（调用构造函数，传入长、宽、层数）
                Building myBuilding = new Building(inputLength, inputWidth, inputFloor);

                // 4. 通过属性MyPrice给对象赋值（设置单价）
                myBuilding.MyPrice = inputPrice;

                // 5. 计算并输出结果（格式化输出，保留2位小数，与实验图一致）
                Console.WriteLine("\n===== 楼房计算结果 =====");
                Console.WriteLine("楼房总面积：{0} 平方米", myBuilding.GetArea()); // 调用GetArea()方法
                Console.WriteLine("楼房总价：{0} 万元", myBuilding.TotalPrice()); // 调用TotalPrice()方法

                // 防止程序运行后立即关闭控制台（让用户看清结果）
                Console.WriteLine("\n按任意键退出...");
                Console.ReadKey();
            }
        }
    }
}
